package tests;


import static org.junit.Assert.*;

import java.util.List;

import metier.Film;

import org.junit.Before;
import org.junit.Test;

import DAO.DAOFilm;
import DAO.DAOFilmJPA;
import DAO.DAOJPA;


public class testDAOFilm {

	private DAOFilm dao;
	private Film film,film2,film3;

	@Before
	public void init() {
		film = new Film("titreFilm",2014,20);
		film2 = new Film("testfilm",2014,20);
		film3 = new Film("titretest",2014,20);
		dao = DAOFilmJPA.getInstance();
		DAOJPA.viderBase();
	}
	
	@Test
	public void testFilm() {
		// Pr�conditions
		assertEquals(0,dao.getNombreFilms());	// rien dans la table
		
		dao.save(film);
		
		// Postconditions
		assertEquals(1,dao.getNombreFilms());	// Un article est dans la table
		assertNotEquals(-1, film.getId());	// Le code de l'auteur contient la cl� g�n�r�e par la BD
		
		// On v�rifie que l'auteur de la table est bien celui du test
		Film	film2 = dao.get(film.getId());	
		assertEquals(film, film2);			// C'est bien le m�me code
		
		// On supprime l'objet que l'on vient de consulter
		dao.remove(film2);				
		
		assertEquals(0,dao.getNombreFilms());	// La table est bien vide
		
		// Attention, on ne peut rien faire pour auteur1. Il parait toujours manag�...
	}
	
	@Test(expected=IllegalArgumentException.class)
	public void testSaveException() {

		dao.save(film);
		assertEquals(1,dao.getNombreFilms());
		// Ajouter le  meme film lance une exception
		dao.save(film);

	}	
	
	@Test(expected=IllegalArgumentException.class)
	public void testRemoveException() {
	
		dao.save(film);
		assertEquals(1,dao.getNombreFilms());

		// Supprimer 2 fois le m�me auteur lance une exception 
		dao.remove(film);
		assertEquals(0,dao.getNombreFilms());
		
		dao.remove(film);
	}
	
	
	@Test
	public void testSelectivLoad() {
		dao.save(film);
		dao.save(film2);
		dao.save(film3);
		assertEquals(3,dao.getNombreFilms());
		List<Film> liste=dao.loadAll();
		//List<Film> liste=dao.loadAllWithName("test");
		assertEquals(film,liste.get(0));
		assertEquals(3,liste.size());


	}

}